export{}
///泛型约束
interface lengthType {
    length:number
}
function f1<T extends lengthType>(val:T){

}
f1('abcde') 
f1([1,2,3])
f1({
    length:3,//对象只要有一个参数，就可以做f1的形参
    a:1,
    b:2
})
//f1(100) //报错，数字类型没有length属性的！

//需求函数，第一个参数是对象，第二个参数是对象中的属性，返回值是对象中对应的属性值
let obj ={
    a:1,b:2,c:3,d:4
}

//keyof obj的数据类型 会得到对象的键名组成的联合类型 'a'|'b'|'c'|'d'

function f2<T,K extends keyof T>(val:T,item:K):T[K]{
    return val[item]
}
f2(obj,'c')
//f2(obj,'e') //报错

f2({
    uname:'zs',
    age:30,
    weight:'60kg'
},'weight')